Только дебаффы ядовитых стрел могут стакатся, но даммик обязан иметь дальнюю атаку (при условии что у разных абилок ядовитых стрел будут разные баффы в настройках).
Так же можно юзать таймер и ауру торнадо как написали выше, ну если уж совсем нужен сложный бафф как дефолтный - то тут триггер и немного гемора с мемхаком, зато полный комплект параметров (мигает иконка в статусе перед завершением время действия, бафф спадает с цели после диспела, смерти (у цели крест перерождения или аналог), складывается или не складывается в зависимости от кода).
Пример не рекомендуемый к повторению
function FormatAirportTrainingBar takes integer fp_n returns string
local string str = ""
if ( fp_n <= 0 ) then
return str
endif
loop
exitwhen fp_n < 10
if ( udg__TempBarStyle == 0 ) then
set str = str + "''''''''''"
else
set str = str + "||||||||||||||||||||"
endif
set fp_n = fp_n - 10
endloop
loop
exitwhen fp_n <= 0
if ( udg__TempBarStyle == 0 ) then
set str = str + "'"
else
set str = str + "||"
endif
set fp_n = fp_n - 1
endloop
return str
endfunction
function UpdateAirportTrainingBar takes texttag tt, integer fp_nTick, integer fp_nTickMax returns nothing
local integer nProgress
local integer nLen
local string strTT1
local string strTT2
if ( tt == null ) then
call BJDebugMsg( "text tag hDZzRwuZxFQcXqaMPnML null" )
return
endif
set nLen = R2I( I2R( fp_nTickMax ) / 300 * 100 )
set nProgress = R2I( I2R( nLen ) / fp_nTickMax * fp_nTick )
set strTT1 = "" + FormatAirportTrainingBar( nProgress )
set strTT2 = FormatAirportTrainingBar( nLen - nProgress ) + ""
call SetTextTagText( tt, "|cff0080c0" + strTT1 + "|r|cffff0000" + strTT2 + "|r", 0.023 )
endfunction
function Get_Staff_of_Purification takes unit runner returns item
set bj_forLoopAIndex = 0
set bj_lastCreatedItem = null
if GetUnitAbilityLevel( runner, 'Arun' ) == 0 then
return null
endif
loop
exitwhen bj_forLoopAIndex > 5
set bj_lastCreatedItem = UnitItemInSlot( runner, bj_forLoopAIndex )
if GetItemTypeId( bj_lastCreatedItem ) == 'I01A' then
return bj_lastCreatedItem
endif
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
return bj_lastCreatedItem
endfunction
function Trig_RunnerDamageDetect_Conditions takes nothing returns boolean
if GetTriggerEventId( ) == EVENT_UNIT_DAMAGED then
return GetEventDamage( ) > 0.00 and GetEventDamageSource( ) != GetTriggerUnit( ) and GetEventDamageSource( ) != DummyAttacker
endif
return true
endfunction
function HealRunner takes nothing returns nothing
local DamageData dd = GetDataBX( GetExpiredTimer( ) )
call UnitRemoveAbility( dd.attacked, 'AMhp' )
call SetUnitState( dd.attacked, UNIT_STATE_LIFE, dd.hp )
call RemoveDataBX( dd.trix )
call DestroyTimer( dd.trix )
call dd.clear( )
call dd.destroy( )
endfunction
function Trig_RunnerDamageLock_Actions takes nothing returns nothing
local TriggerData st = GetDataBX( GetTriggeringTrigger( ) )
local DamageData dd
local eventid id = GetTriggerEventId( )
if id == EVENT_GAME_TIMER_EXPIRED and st.id < st.time and st.attacked != null then
set st.id = st.id + 1
if GetUnitAbilityLevel( st.attacked, 'Bcyc' ) > 0 or GetUnitAbilityLevel( st.attacked, 'Bcy2' ) > 0 then
call SetTextTagPos( st.tt, GetUnitX( st.attacked ) - 60.00, GetUnitY( st.attacked ) - 60.00, 585.00 )
else
call SetTextTagPos( st.tt, GetUnitX( st.attacked ) - 60.00, GetUnitY( st.attacked ) - 60.00, 80.00 + GetUnitFlyHeight( st.attacked ) )
endif
call UpdateAirportTrainingBar( st.tt, 100 - R2I( st.dmg / st.hp * 100.00 ), 100 )
elseif id == EVENT_UNIT_DAMAGED and st.dmg < st.hp then
set dd = DamageData.create( )
set dd.trix = CreateTimer( )
set dd.attacked = st.attacked
set dd.dmg = GetEventDamage( )
set dd.hp = GetUnitState( dd.attacked, UNIT_STATE_LIFE )
call SetDataBX( dd.trix, dd )
call UnitAddAbility( dd.attacked, 'AMhp' )
call SetUnitState( dd.attacked, UNIT_STATE_LIFE, dd.hp + dd.dmg )
call TimerStart( dd.trix, 0.00, false, function HealRunner )
set st.dmg = st.dmg + dd.dmg
else
call UnitRemoveAbility( st.attacked, 'A08L' )
call UnitMakeAbilityPermanent( st.attacked, false, 'A08L' )
call DisableTrigger( st.trg )
call SetTextTagVisibility( st.tt, false )
if not IsUnitDead( st.attacked ) then
call UnitRemoveAbility( st.attacked, 'B00A' )
endif
call RemoveSavedInteger( gg_htb_HashData, ExKeySoPRunner, GetHandleId( st.attacked ) )
call st.RemoveTrigger( )
call st.destroy( )
endif
set id = null
endfunction
function Trig_Staff_of_Purification_Actions takes nothing returns nothing
local TriggerData dd
local unit Runner = GetSpellAbilityUnit( )
local integer RunnerId = GetHandleId( Runner )
local item Staff = LoadItemHandle( gg_htb_HashData, RunnerId, ExKeySoP )
local integer ChargesCount = 0
local trigger trig = LoadTriggerHandle ( gg_htb_HashData, ExAtomShield, RunnerId )
local integer pBuff
if Staff == null then
set Staff = Get_Staff_of_Purification( Runner )
if Staff == null then
//call DisplayTextToPlayer( Player( CrashPlayerNumber ), 0.00, 0.00, I2Sx( 'A01Q', CrashPlayerNumber ) )
call BJDebugMsg( DEBUG + I2Sx( 'A02O', 0 ) + INFO )
return
endif
call SaveBoolean( gg_htb_HashData, RunnerId, ExKeyHasStaff, true )
call SaveItemHandle( gg_htb_HashData, RunnerId, ExKeySoP, Staff )
endif
set ChargesCount = GetItemCharges( Staff )
if ChargesCount < 1 then
set Runner = null
set Staff = null
set trig = null
return
endif
call SetItemCharges( Staff, 0 )
if trig != null then // блокирующие урон способности не складываются.
call TriggerExecute( trig )
set trig = null
endif
set dd = TriggerData.create( )
set dd.attacked = Runner
set dd.pl = GetOwningPlayer( Runner )
set dd.trg = CreateTrigger( )
set dd.trc = TriggerAddCondition( dd.trg, Condition( function Trig_RunnerDamageDetect_Conditions ) )
set dd.tra = TriggerAddAction ( dd.trg, function Trig_RunnerDamageLock_Actions )
set dd.tt = CreateTextTag( )
set dd.hp = 1000.00 * ChargesCount
set dd.dmg = 1.00
set dd.id = 0
set dd.time = 480
set dd.c = 0.03125
call UnitAddAbility( Runner, 'A07E' )
call UnitRemoveAbility( Runner, 'A07E' )
call UnitAddAbility( Runner, 'A08L' )
call UnitMakeAbilityPermanent( Runner, true, 'A08L' )
call SetDataBX( dd.trg, dd )
call SaveInteger( gg_htb_HashData, ExKeySoPRunner, RunnerId, dd )
call TriggerRegisterPlayerEvent( dd.trg, dd.pl, EVENT_PLAYER_LEAVE )
call TriggerRegisterDeathEvent( dd.trg, Runner )
call TriggerRegisterUnitEvent( dd.trg, Runner, EVENT_UNIT_DAMAGED )
call TriggerRegisterTimerEvent( dd.trg, 0.03125, true )
if GetLocalPlayer( ) == dd.pl or IsPlayerAlly( GetLocalPlayer( ), dd.pl ) then
call SetTextTagVisibility( dd.tt, true )
else
call SetTextTagVisibility( dd.tt, false )
endif
set pBuff = GetUnitAbility( dd.attacked, 'B00A' ) + 0x90
set dd.c = TimerGetElapsed( DispTimer )
call WMem( RMem( pBuff ) + 0x4, mR2I( dd.c + 15.10 ) )
call WMem( RMem( pBuff ) + 0x8, mR2I( dd.c + 10.408 ) )
call SetBuffLevel( pBuff - 0x90, ChargesCount )
call UpdateAirportTrainingBar( dd.tt, 100, 100 )
set Runner = null
endfunction
//===========================================================================
function InitTrig_Staff_of_Purification takes nothing returns nothing
set udg__TempBarStyle = 0
endfunction
Выше пример баффа для предмета, который образует щит блокирующий урон, кол-во заблокированного урона и сколько еще заблокирует щит отображается над головой героя, в виде полоски здоровья (только цвет сине-красный). Так же в статуе есть бафф, один в 1 как бафф дефектных способностей вара, не складывается - новый, перебивает старый. И так далее...
поиск юзал? я внятного ответа не нашел, но вообще-то пишут, что там картинку вставляют
"war3mapMap.blp" у ее еще размер нужно норм поставить, путь не знаю точно какой еще надо приписывать. и нужно ли
вроде этой функцией, не знаю
скачай этот файл и закинь его в папку AdicHelper\lib\ в папке с jngp
после в шапке карты напиши include "ifdebug.j"
и создай триггер с событием
игрок написал в чат ifdebug как точное совпадение
действие
кастом скрипт log()
после чего запусти карту и напиши в чат ifdebug
он выведет на экран все if/else/elseif через которые он прошёл (true в скобках в конце строки означает что значение в ифе истина)
похоже более всего на мусор, попадающий в память откуда-то извне. Обычно пропущенная строка автокаста такой фигней страдает. Нельзя точно сказать, нужно менять поля и смотреть. К счастью, описания можно менять и локально, не перепаковывая карту
Если есть тимвиверные лаги, есть ещё миллион других программ для удалёнки, AnyDesk или Spleshtop (вроде платный, но это не проблема)
Но я делал по другому: по впн цеплялся домой на роутер, на домашнем компе на Win 10 pro создавал второго пользователя (в принципе можно и создавать и не патчить десятку под сервер), подключался через удалённый рабочий стол к домашнему компу и в принципе всё, vpn соедение на убунте хз где, но remmina для удалённого рабочего стола есть точно, ну или параллелс десктоп в режиме rdp.
Если ничего не понятно, то могу подробно расписать что и как я делал
Так же никто не отменял поставить варик на любой комп в рабочей сети (если есть доступ на такие пакости), хоть на компьютер бухглатера и в режиме второго пользователя сидеть по RDP на этом компе, WE вроде сильно не грузит =)
потому шо идей у самого тонны
Ну а вообще глянуть бы ещё что там у тебя за мапа и что за заклинания и что к чему
И какая версия варика?
Если для 1.26, то NOPE, а если выше то пиши в лс, кинь мапу и сразу распиши поподробнее что к чему, лучше в ВК
Видимо єта кнопка тесно спряжена с более низкими слоями игры (чит. "hardcoded"). Похоже, что скрыть её нельзя. Я могу только посоветовать вернуться назад и посмотреть, что можно сделать по-другому, чтобы не приходилось скрывать кнопку.
Порыть там надо, во всяком случае стандартные приказы, иконки и клавиши к ним там прописаны.
(естесственно нужно импоритровать эти изменённые файлики в карту)
Я пробовал прописывать кнопке неадекватные значения позиции кнопки и пиктограммы, но ничего не вышло — игра подставляет свои значения.
Таурен Тауреныч, точнее не блокировать, а прятать улучшения (если про улучшения говорим).
пример
Объяснение: Вот нажали, и текущее исследование запущено. Мы ловим начало и завершение этого исследования. Есть три апгрейда, и если выбрано одно из них, то два остальных блочат. Если прерывают через кнопку отмена, то нужно все вернуть как было
Событие - Игрок начинает улучшение
Действие - То блокировать остальные улучшения игрока (через вкладку Игрок делаешь max уровень улучшения ставишь на ноль, тогда игрок не сможет выбрать еще одно)
Событие - Игрок прекращает (прерывает) улучшение (это когда нажимает на отмену) Еще надо проверить, срабатывает ли событие это при уничтожении лаборатории (здания) в тот момент, когда что-то изучает. Если нет, тогда придется добавить в триггер событие "Юнит умирает"
Действие - То вернуть как было.
Событие - Игрок завершает улучшение (короче успешно завершено, никак не откатишь улучшение)
Действие - Тут ..... (ваше действие) подчищаем все и др.
Pick every unit in range [250] matching condition [бафф спелла]
Всё что находится внутри данного блока произойдёт столько раз, сколько воинов находится внутри выбранной группы. Обратиться к воину можно через Picked Unit ( GetEnumUnit( ) ). Если Вам нужно добавить событие на смерть именно этих воинов, то прямо здесь внутри блока добавляете их в событие триггера, выбрав их через Picked Unit, или сохраняете их в переменные.
Также можно не сохранять каждого воина, а занести их в отдельную группу. А вместо проверки:
ПС. Давать спеллбук после найма (чтобы он сам пропадал после морфа) героя нельзя, ибо в этом случае, если герой не успел или не захотел выбрать талант, то у него пропадает такая возможность после морфа.
Делать нужно именно так. И что бы у тебя не было здесь ошибки, тебе нужно каким-либо образом обозначить то, что у героя есть непотраченный талант. Т.е. ты будешь давать герою спеллбук после морфа, если у него есть доступные очки талантов.
И ещё кое-что: если ты триггерно даёшь спеллбук и пермоментишь его (тоже триггерно), то после морфа он не пропадаёт, а если ты его отнимаешь - он не возвращается (т.е. нету лишних ненужных появлений/исчезновений абилки).
А так же смотри что бы спеллбук не остался пустым, решается это пермоментом абилок внутри спеллбука.
Делаешь предметную абилку с уровнями, создаешь абилку-пустышку. В скиллы герою даешь пустышку. Отслеживаешь изучение пустышки и в соответствии с ее уровнем апаешь "скрытый" предметный скилл.
Делаешь предметную абилку с уровнями, создаешь абилку-пустышку. В скиллы герою даешь пустышку. Отслеживаешь изучение пустышки и в соответствии с ее уровнем апаешь "скрытый" предметный скилл.
not_name:
я карту посмотрел, да, пытался сделать похожее
только там с очередью приказов шляпа выходит, поэтому я лучше сделаю все визуально
в общем, реализовал, как и говорил выше - при смерти сразу воскрешаю героя на месте гибели, пауза, анимация, таймер, по прошествии таймера - выдаю все нужное, при повторной смерти - забираю
адекватно работает с крестами
Неуязвимость проверяют через даммика с атакой, через приказ, сможет ли атаковать или нет, просто проверка выполнения приказа. Так же пытаются нанести урон и смотрят сколько он отнял здоровья, так можно и определить неуязвимость и вычислить резист юнита к конкретному типу урона.
Кароче берёшь крит и лайфстил.
Если правильно всё выдавать - будет работать, так что эксперементируй.
Подсказка: в момент замаха крит уже должен быть у юнита.
Более подробно или с примером - мб попозже... Но не ответить хоть что-то - не смог.
Да сделай проще. Создай многоуровневую способность-пустышку. и когда отдаешь приказ атаковать в область, давай ему эту способность и с помощью неё отслеживай, какую область атаковать.
Например,
способность уровень 1, значит атаковать должен 1 область.
Уровень 2 - 2 область и т. д.
Не вижу смысла усложнять жизнь с хеш-таблицей.
Надеюсь понятно?) Отдал приказ, присвоил способность, после каста жди пару сек и в зависимости от уровня способности-пустышки отправляй в ту или иную область.
Попробуй событие - входит в регион, ну и проверь что юн ит мертв.
Дефолтные способности сложно отслеживать, многие используют для работы свои методы, как к примеру руны или орбы - они хоть и кастуют спелл нл события каста нету, как и проверки приказа, кулдауна и прочего.
наверн не правильные параметры абилки, если не ошибаюсь. у меня тоже вылетала игра, когда не указывал. надо смотреть и сравнивать со станд абилами
раскрыть
Характеристики: Нормальная форма боевой единицы - эта форма, в которой находится кастер (ее не обязательно указывать, в большинстве случаев кастер вернется сам к своей форме. А то, что указано в этой графе - пустышка.) Альтернативная форма боевой единицы - форма, в которую хотят превратиться
Между формами должны быть зависимости, то есть у этих двух форм должна быть эта способность (у двух типов юнитов должна быть указана эта способность). иначе варкрафт вылетает с критической ошибкой, если у одной из них не указана эта способность. Исключение - если в способности в графе "Постоянные" установлена галочка. Это означает, что превращает в эту форму навсегда, и обратно в нормальную форму нельзя будет вернуться, так как кнопка способности пропадает.
Замечено, что, если юнит находится в альтернативной форме, и он умирает, а потом воскрешает (например, перерождением), то воскрешает в нормальной форме. Даже, если не был превращен в альтернативную форму через морф, а создан через триггер. Все что нужно это абилка с нормальной формой, чтобы превратиться в нее после смерти
Морфы по своей сути способности выключатели, они как и "Жар преисподней" или "щит пехотинца" могут быть включены и выключены, но только вот что если юнит будет оглушён или вовсе мертв? А для того и существует флаг Непрерываемый, он гарантирует что юнит выполнит приказ "во что-бы то не стало", даже если он умрет. Морфы славились этими багами еще во времена царя гороха, и близзарды их переделывали, но не все поправили и теперь метаморфоза + руна = Непрерываемый навсегда! Руна удаляет способность сразу после выполнения, не давая метаморфозе выполнится еще раз чтобы завершить перевоплощение и снять флаг Неприрываемый Так как сам морф то не произошел, юнит не изменяется а остается каким был, но уже с бонусом в виде неспособности изменить первый отданный приказ.
но вот то что у вас юнит умирает, это очень странно.
без карты нельзя ничего сказать
еще примеры см тут
Стандартный ИИ не будет юзать канал, как и не будет применять стандартные заклинания так как вы хотите. Вовсе весь микроконтроль и правила использования способностей не доступны для изменения.
Либо брать дефолт с нужными правилами применения, либо писать самому правила применения скиллов, а редакторе триггеров.
Потом над блоками надо поставить невидимые платформы и поднимать/опускать кнопками Ctrl+Shift+PgUp/PgDn. PrincePhoenix, он всё равно лучший ответ не выбирает, бот такие не обрабатывает.
так не поймешь, чего у тебя там не работает. Опиши ПОДРОБНО чего сделать не так, что она не работает. раньше работала?
Скидывай скрин ошибки, карту. В папке варкрафт есть папка "Errors" там текстовик нужно найти.
предположение
Пробовал выключить или временно удалить все триггеры? если без триггеров нормально работает - вывод?
похоже автор какую-нибудь карту открыл, отредактировал ландшафт. Она там мб, к примеру, на cjass написано. попробуй xgm.guru/p/wc3/178775 Если ошибка будет на jngp, там есть в папке jngp есть папка "logs" тоже ошибки хранит
Еще может быть нужно включить UMS. Даже, если без триггеров не сохраняет, возможно какие-нибудь за какие-нибудь ограничения (кол-во деревьев, размер карты и прочее).
Все работает. Нужно только правильно настроить. Изменить тайлсет. Сохранить. Потом сохранить карту. Выключить WE. Включить WE, загрузить карту. В теории на карте должно быть много разных тайлсетов со своими настройками в зависимости от того как вы настроили.
Насколько помню, на картах большого размера могут быть глюки с размещением порчи по краям. Но в целом чего-то серьёзного, как и указал Bergi_Bear, нет.
Если заменить модель дерева на модель травы, с анимамцией пригинания при смерти. Убрать колизию, то может получится.
Вот примерная наработка на деревьях.
циклы+массивы
читай статьи
и все более менее нормальные карты сделаны людьми которые прочли все статьи
та же дота например(хотя она не особо нормальная)
Sprite - крепление для эффекта огня, который появляется при повреждениях, если модель используется для здания или для юнита, классифицируемого в РО как механический.
Друга зачем? Нинада, так толку не будет...
Просто используешь Inject main (vjass) или Define (Cjass) чтобы убрать 1 только строчку из main
//***************************************************************************
//*
//* Map Configuration
//*
//***************************************************************************
//***************************************************************************
//*
//* Main Initialization
//*
//***************************************************************************
//===========================================================================
function main takes nothing returns nothing
call SetCameraBounds(- 3328.0 + GetCameraMargin(CAMERA_MARGIN_LEFT), - 3584.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM), 3328.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT), 3072.0 - GetCameraMargin(CAMERA_MARGIN_TOP), - 3328.0 + GetCameraMargin(CAMERA_MARGIN_LEFT), 3072.0 - GetCameraMargin(CAMERA_MARGIN_TOP), 3328.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT), - 3584.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM))
call SetDayNightModels("Environment\\DNC\\DNCLordaeron\\DNCLordaeronTerrain\\DNCLordaeronTerrain.mdl", "Environment\\DNC\\DNCLordaeron\\DNCLordaeronUnit\\DNCLordaeronUnit.mdl")
call NewSoundEnvironment("Default")
call SetAmbientDaySound("SunkenRuinsDay")
call SetAmbientNightSound("SunkenRuinsNight")
call SetMapMusic("Music", true, 0)
call InitBlizzard() // вот и все, удалим и не будет бж объектов.
call InitGlobals()
call InitCustomTriggers()
call RunInitializationTriggers()
endfunction
Совсем забыл, функция main генерируется при сохранении карты в редакторе
Без cjass или vjass придется выколупывать war3map.j (код карты) файл из карты и править ручками в блокнотике, геморойно до безобразия, за то ненужен c\vjass и его знания.
quq_CCCP, тогда ну нафиг
это полноценный реверс инженеринг уже будет Asaaaaaar, короче это потребует кучу времени и никто тут этим заниматься скорее всего не будет
думаю даже за платно сложно будет найти того кто согласится убить кучу времени на это
Я решил проблему, используя обработчики событий BlzTriggerRegisterPlayerKeyEvent и EVENT_PLAYER_MOUSE_DOWN
При нажатии правой кнопки мыши проверяется наличие живого героя и селекция юнитов, если в ней нет юнитов которыми игрок может управлять (или вообще никто не выбран) то юнит моментально отправляется приказом "move" в точку, на которую кликнул игрок и сразу выбирается.
При нажатии клавиши герой просто выбирается.
Алексей777, легко. Заходим в редактор объектов, ищем пункт "Файл модели" (в этом случае - "units\creeps\NightElfBattleship\NightElfBattleship") и выковыриваем его из mpq.
war3.mpq
war3x.mpq
доставать mpq editor
на сайте есть
Даже более пошаговая инструкция:
Открываешь редактор варкрафта
Смотришь в редакторе объектов путь к модели (это надо включить там показать значения переменных или что-то там, тут пусть кто-то уточнит, если нужно, я наизусть не помню, хотя постоянно переключаю, как-то так Units\Creeps\StoneGolem\StoneGolem.mdx)
открываешь war3.mpq, ищешь там по пути модель в соответствующих папках
если ее нет, открываешь war3x.mpq и ищешь там
нажимаешь Export
выбираешь куда вынуть
подтверждаешь
все, открываешь папку, куда оно того и там модель и текстура
текстуру можно фотошопить, а модель мдлвисить как душа пожелает /
инструкция может быть чуть не точной, т. к. сочинялась на ходу
похоже более всего на мусор, попадающий в память откуда-то извне. Обычно пропущенная строка автокаста такой фигней страдает. Нельзя точно сказать, нужно менять поля и смотреть. К счастью, описания можно менять и локально, не перепаковывая карту
Сделать триггер для проверки кода, ну и организовать систему для его считывания и поверь это очень много всего, придется продумать.
Если коротко ты цифрами будешь (условно) сохранять своего героя, каждый набор цифр отвечает за какой то параметр героя, силу, ловкость, уровень, предметы и так далее, когда я говорю что это очень много всего придется продумать так и есть, тебе придется создать базу данных, для всех чисел и все проверять при введении команды, для защиты можно сверять суму чисел и проверять героя за которого играет игрок.
Мой тебе совет, не поленись и вбей в поиск "сделать команду save для карты варкрафт 3", на твое удивление там будет то что тебе нужно, уже на второй ссылке.
Знаю такой баг. Вылечтл удалением из карты всего импорта-мусора и переводов путей импорта на источник из кампании.
Т.е. этот баг возникает при очень большом весе впихиваемой в кампанию карты.
Maxsavin, я каждой карте из кампаний даю свой кэш, чтобы не перепуталось ничего.
Не знаю, что получилось бы, сделай я один кэш-файл на всю кампу и грузи карты потом не по порядку. Проверять не буду. Кампания - это пак карт.
Поставил 1.26. Вступительное видео заработало. Звуков диалогов в начале 1 миссии нет, но похоже они здесь и не планировались. В самом журнале строчек не добавляется. Нашёл их в том, что вызывается в левой части меню.
функцию Trig_BlockA_Func005Func011Func001C() убери нафиг
как и другие функции используемые для ифов и подобной херни
а вообще про это написано во всех статьях про jass
мб стоит прочитать сразу несколько статей а затем задавать сюда вопросы?
лол что?
скорость работы глобалок в 1,5 раза быстрее чем у хештейблов
т.е. 10 обращений к хештейблам выполняется столько же времени сколько и 15 к глобалкам
если каждую секунду не выполняется более 1000 обращений к хештейблу то не юзать хэштейблы ради оптимизации та ещё тупость
Да, и для какой цели там сверху стоит "exitwhen true"?
Ну если много юнитов создавать, особенно тяжелых юнитов вроде героев, то будет пролаг, т.к юниты весьма тяжелые обьекты по меркам движка.
Первый раз созавая юнитов движок будет подгружать все их данные из слк таблиц, что тоже вызывает пролаг.
» WarCraft 3 / Кастомная способность
» WarCraft 3 / Часто карты не запускаются
» WarCraft 3 / Механика босса
» WarCraft 3 / Как открыть модель формата mdl?
» WarCraft 3 / Выбор варианта здания
» WarCraft 3 / Цикл способности
» WarCraft 3 / Конверт моделей
» WarCraft 3 / Морф героя
» WarCraft 3 / Вампиризм
» WarCraft 3 / ИИ нежити
» WarCraft 3 / Очередная проблема
» WarCraft 3 / Нестандартный ландшафт
» IrInA Host Bot / Можно ли сохранять игру?
» WarCraft 3 / Анимация для Декораций
» WarCraft 3 / Форматы звука для WC3
» WarCraft 3 / Все что за пределами карты
» WarCraft 3 / Стандартные модели
» WarCraft 3 / Модели с импортируемыми текстурами
» WarCraft 3 / замена StringHash()
» WarCraft 3 / Отлов определенных атак
» WarCraft 3 / Как сделать это в редакторе карт варкрафт 3?
» WarCraft 3 / Проблемы с Кампанией
» IrInA Host Bot / Параметры карты повреждены
» WarCraft 3 / loop